#include <stdio.h>
#include <iostream>

#include "xml/XMLDocument.h"

using namespace std;

extern int xmlparse();
extern int dtdparse();

int main(int argc, char **argv)
{
	int err;
	extern FILE * xmlin;	/* Variable globale utile pour l'analyseur XML */
	extern FILE * dtdin;	/* Variable globale utile pour l'analyseur DTD */
	extern char dtd[255];	/* Variable globale remplie par xml.y contenant le nom de la DTD */
	extern XMLDocument * doc; /* Variable globale remplie par xml.y contenant le document XML */
	FILE * fid;

	fid = fopen(argv[2], "r");

	if (!fid)
	{
		cout << "Erreur d'ouverture du fichier XML..." << endl;
		return -1;
	}

	xmlin = fid;

	cout << "Parsage du document XML en cours..." << endl << endl;

	err = xmlparse();
	if (err != 0)
	{
		printf("Parse ended with %d error(s)\n", err);
	}
	else
	{
		printf("\nParse ended with sucess\n\n", err);
	}

	fclose(fid);

	cout << "Fichier de DTD à parser : " << dtd << endl << endl;
	fid = fopen (dtd, "r");
	if (!fid)
	{
		cout << "Erreur d'ouverture du fichier DTD..." << endl;
		return -1;
	}

	dtdin = fid;

	cout << "Parsage de la DTD en cours..." << endl << endl;
	err = dtdparse();
	if (err != 0)
	{
		printf("Parse ended with %d error(s)\n", err);
	}
	else
	{
		printf("Parse ended with sucess\n", err);
	}

	if (string("xmlToString") == argv[1])
	{
		printf("\nDocument XML parsé :\n\n");
		cout << doc->toString() << endl;
	}
	else if (string("dtdToString") == argv[1])
	{
		printf("\nDocument DTD parsé :\n\n");
		cout << doc->getDtdDocument()->toString() << endl;
	}
	else
	{
		printf("\nCheck validity :\n\n");
		if (doc->checkDocumentValidity())
		{
			cout << "Une erreur a été détectée" << endl;
		}
		else
		{
			cout << "Aucune erreur détectée" << endl;
		}
	}

	fclose(fid);

	return 0;
}
